|
|
|
Lab 3 -
Behavioural VHDL
Цел
|
Придобиване на практически опит за разработване на
поведенчески VHDL модели.
|
Задание |
Да се
разработят поведенчески VHDL модели на различни цифрови схеми.
Да се провери корекността на моделите посредством
симулация. |
Задача 1 --
Брояч, 4bit, реверсивен, асинхронен reset (оператор
if-then-else)
Да се разработи поведенчески VHDL модел на
4-битов брояч. Описанието на изводите на брояча е дадено в Таблица
1.
| Таблица 1.
|
| Сигнал |
Тип |
Посока |
Функция |
| UD |
STD_LOGIC |
вход |
посока
на броене; 1 - събиране, 0 - изваждане
|
| CIN |
STD_LOGIC |
вход |
входен
пренос/заем; 1 - разрешава броенето, 0 - забранява
броенето |
| RESET |
STD_LOGIC |
вход |
асинхронно нулиране
|
| CLOCK |
STD_LOGIC |
вход |
тактов
вход; активен нарастващ фронт
|
| Q |
UNSIGNED(3 downto 0)
|
изход |
състояние на брояча
|
| COUT |
STD_LOGIC |
изход |
изходен
пренос/заем |
На фигура 1 е даден модела на 4-битов брояч (cnt4.vhd).
Съответната тестова установка е записана във файла cnt4_tb.vhd.
Разгледайте дадения модел и се уверете, че разбирате смисъла на VHDL
конструкциите в него.
|
Фигура 1 --
Поведенчески модел на брояч.
|
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity CNT4B is
port (UD, CIN, RESET, CLOCK: in STD_LOGIC;
Q: out UNSIGNED(3 downto 0);
COUT:out STD_LOGIC);
end CNT4B;
architecture BEHAVIOR of CNT4B is
begin
process (CLOCK, RESET)
variable CNT : UNSIGNED(3 downto 0);
begin
if RESET='0' then
CNT := "0000";
Q <= CNT;
else
if (CLOCK='1'and CLOCK'event)then
if cin='1' then
if ud='1' then
CNT := CNT+1;
if CNT="1111" then
cout<='1';
else
cout<='0';
end if;
elsif ud='0' then
CNT := CNT-1;
if CNT="0000" then
cout<='1';
else
cout<='0';
end if;
else
CNT := (others => 'X');
end if;
end if;
Q <= CNT;
end if;
end if;
end process;
end behavior; |
Забележка: Поетапната разработка на модела от
Фигура 1 може да се види тук.
Задача 2 --
Брояч, BCD, реверсивен, асинхронен reset (оператор
if-then-else)
Да се разработи поведенчески VHDL модел на
двоично-десетичен (BCD) брояч.
|
Указание
Използвайте за основа модела от Задача
1. |
Задача 3 --
Декодер 3 x 8 (оператор case)
Да се разработи поведенчески VHDL модел на 3 x 8
декодер. Описанието на изводите е дадено в Таблица 2.
| Таблица 2.
|
| Сигнал |
Тип |
Посока |
Функция |
| ain |
std_logic_vector (2 downto 0)
|
вход |
входно
състояние |
| enable |
std_logic |
вход |
разрешение; 1 - на yout излиза декодираното
състояние, 0 - на yout има нули
|
| yout |
std_logic_vector (7 downto 0)
|
изход |
декодирано състояние
|
На фигура 2 е даден модела на декодера (dec3x8.vhd).
Разгледайте дадения модел и се уверете, че разбирате смисъла на VHDL
конструкциите в него. Проектирайте тестова установка и проверете
корекността на модела посредством симулация.
|
Фигура 2 --
Поведенчески модел на декодер.
|
library ieee;
use ieee.std_logic_1164.all;
entity dec3x8 is
port ( ain: in std_logic_vector (2 downto 0);
enable : in std_logic;
yout: out std_logic_vector (7 downto 0));
end dec3x8;
architecture behavioral of dec3x8 is
constant sdef : std_logic_vector(7 downto 0) := "00000000";
constant s0 : std_logic_vector(7 downto 0) := "00000001";
constant s1 : std_logic_vector(7 downto 0) := "00000010";
constant s2 : std_logic_vector(7 downto 0) := "00000100";
constant s3 : std_logic_vector(7 downto 0) := "00001000";
constant s4 : std_logic_vector(7 downto 0) := "00010000";
constant s5 : std_logic_vector(7 downto 0) := "00100000";
constant s6 : std_logic_vector(7 downto 0) := "01000000";
constant s7 : std_logic_vector(7 downto 0) := "10000000";
begin
decoder: process (ain, enable) begin
if(enable='0') then
yout <= sdef;
else
case ain is
when "000" =>
yout <= s0;
when "001" =>
yout <= s1;
when "010" =>
yout <= s2;
when "011" =>
yout <= s3;
when "100" =>
yout <= s4;
when "101" =>
yout <= s5;
when "110" =>
yout <= s6;
when "111" =>
yout <= s7;
when others =>
null;
end case;
end if;
end process;
end behavioral; |
Задача 4 --
Декодер за управление на седем-сегментен индикатор (оператор case)
Да се разработи поведенчески VHDL модел на
декодер за управление на седем-сегментен
индикатор.
|
Указание
Използвайте за основа модела от Задача
3. |
|
|